#include<iostream>


using namespace std;

//class A
//{
//
//public:
//
//  void f() { cout << "A::f()" << endl; }
//
//  int a;
//
//};
//
//
//
//class B : public A
//{
//
//public:
//
//	void f(int a) { cout << "B::f()" << endl; }
//
//	int a;
//
//};
//
//
//int main()
//{
//	B b;
//	b.f();
//    return 0;
//}

class A
{

public:

    A() :m_iVal(0)
    {
        test();
        cout << "A()" << endl;
    }

    virtual void func() { std::cout << m_iVal << ' '; }

    void test() { func(); }

public:

    int m_iVal;

};



class B : public A

{

public:

    B() 
    { 
        test();
        cout << "B()" << endl;
    }

    virtual void func()
    {

        ++m_iVal;

        std::cout << m_iVal << ' ';

    }

};



int main(int argc, char* argv[])
{

    A* p = new B;

    p->test();

    return 0;

}